package com.zbkj.client.task;

import com.zbkj.client.service.AgentClientService;
import com.zbkj.service.dao.client.WeekTaskDao;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * 周任务定时调度器
 * 每周一21点执行，为所有用户生成周任务
 */
@Slf4j
@Component
public class WeekTaskScheduler {

    @Autowired
    private WeekTaskDao weekTaskDao;

    @Autowired
    private AgentClientService agentClientService;

    /**
     * 每周一21点执行周任务生成
     * cron表达式：0 0 21 ? * MON
     * 秒 分 时 日 月 周
     */
    @Scheduled(cron = "0 0 01 ? * MON")
    public void generateWeekTasks() {
        log.info("开始执行周任务生成定时任务");

        try {
            // 1. 查询需要生成周任务的用户列表
            List<Map<String, Object>> userList = weekTaskDao.selectWeekTaskUserList();
            log.info("查询到 {} 个用户需要生成周任务", userList.size());

            if (userList.isEmpty()) {
                log.info("没有用户需要生成周任务");
                return;
            }

            // 2. 循环处理每个用户
            int successCount = 0;
            int failCount = 0;

            for (Map<String, Object> user : userList) {
                try {
                    String locationResult = (String) user.get("locationResult");
                    Integer userId = (Integer) user.get("userId");
                    Integer merId = (Integer) user.get("merId");
                    
                    log.info("开始为用户生成周任务 - 用户ID: {}, 商户ID: {}", userId, merId);

                    // 调用agentClientService.insertWeekTask方法
                    List<Integer> taskIds = agentClientService.insertWeekTask(
                            locationResult,
                            userId,
                            merId
                    );

                    if (taskIds != null && !taskIds.isEmpty()) {
                        log.info("用户周任务生成成功 - 用户ID: {}, 商户ID: {}, 生成任务数: {}",
                                userId, merId, taskIds.size());
                        successCount++;
                    } else {
                        log.warn("用户周任务生成失败（返回空） - 用户ID: {}, 商户ID: {}",
                                userId, merId);
                        failCount++;
                    }

                } catch (Exception e) {
                    log.error("用户周任务生成异常 - 用户ID: {}, 商户ID: {}, 错误信息: {}",
                            user.get("userId"), user.get("merId"), e.getMessage(), e);
                    failCount++;
                }
            }

            log.info("周任务生成定时任务执行完成 - 成功: {}, 失败: {}, 总计: {}",
                    successCount, failCount, userList.size());

        } catch (Exception e) {
            log.error("周任务生成定时任务执行异常", e);
        }
    }

    /**
     * 手动触发周任务生成（用于测试）
     */
    public void manualGenerateWeekTasks() {
        log.info("手动触发周任务生成");
        generateWeekTasks();
    }
} 